--启动引导使用文件、变量
--print('0  mem size:'..collectgarbage("count")) --调试用，查看内存占用
BootProcessVar={}
BootProcessVar.webSer='httpServerV0.3.lua'
BootProcessVar.UserAPConfig="userApConfig.txt"
BootProcessVar.UserWifiConnConfig="userWifiConfig.txt"
BootProcessVar.StartModeName="startMode.txt"
BootProcessVar.mqqtConfigFile="mqqtConfigFile.txt"

--全局使用文件
globalVar={}
globalVar.webSer='httpServerV0.3.lua'

--当前文件内逻辑使用的变量
SystemFileName={}
SystemFileName.InitStartName="defaultConf.lua"  --首次运行初始化文件名称
SystemFileName.InitWifiAccessName="wifiAPConf.lua" --初始化Wifi热点文件
SystemFileName.WifiConnFile="wifiConn.lua" --wifi连接模式
--ConnNum=0 --连接次数 超过5次 运行USERAP模式
TmrObj={}  --存放定时器对象
TmrObj.WifiConnTrm=tmr.create() --创建定时器对象

InitFuncObj={}
--设置常用函数
--SetStartNum --若是参数为0 则修改为startMode.txt中的startNum修改为0，如果是1，则startNum加1
--SetStartNum --用来控制启动模式，当SetStartNum为5的时候，则可以重新设置UserAP(用户AP)，避免因忘记UserAP用户名和密码无法修改配置的问题
InitFuncObj.SetStartNum = function (Num) --启动次数计数函数
    local StartObj={}
    if (Num==0) then
        if file.open(BootProcessVar.StartModeName,"w") then
            StartObj.startNum=0
            file.write(sjson.encode(StartObj))
            file:close() 
        end
    elseif (Num==1) then 
        if file.open(BootProcessVar.StartModeName) then
            StartObjStr=file.read()
            StartObj=sjson.decode(StartObjStr)
            file:close()
            StartObj.startNum=StartObj.startNum + 1
            if file.open(BootProcessVar.StartModeName,"w") then
                file.write(sjson.encode(StartObj))
                file:close() 
            end
        end
    end
    if file.open(BootProcessVar.StartModeName) then
        StartObjStr=file.read()
        file:close()
        print("StartObjNum",StartObjStr)
    end
end

function InitFunc()
    if not(file.exists(BootProcessVar.StartModeName)) then  --如果没有系统启动模式文件则直接进入初始化模式（用来设置一个UserAP）
        --开始初始化模式
        InitFuncObj.SetStartNum(0)
        InitFuncObj.SetStartNum=nil --清空启动次数计数函数，避免内存占用
        local InitStartName = SystemFileName.InitStartName
        SystemFileName=nil
        InitFuncObj=nil
        collectgarbage("collect") --回收之前的内存
        dofile(InitStartName) --开始进入初始化模式
        return
    end
    if not(file.exists(BootProcessVar.UserAPConfig)) then  --如果没有用户AP配置文件也进入初始化模式
        --开始初始化模式
        InitFuncObj.SetStartNum(0)
        InitFuncObj.SetStartNum=nil --清空启动次数计数函数，避免内存占用
        local InitStartName = SystemFileName.InitStartName
        SystemFileName = nil
        InitFuncObj=nil
        --collectgarbage("collect") --回收之前的内存
        --print('2 stop mem size:')
        --print(collectgarbage("count"))
        --以上注解用来调试内存占用
        dofile(InitStartName) --开始进入初始化模式
        return
    end
    
    local StartObj={}
    if file.open(BootProcessVar.StartModeName) then --打开启动计数文件(如果该文件内的计数超过5，则启动初始化模式)
        local StartObjStr=file.read()
        local StartObj=sjson.decode(StartObjStr)
        file:close()
        if (StartObj.startNum==5) then
            --初始化模式
            print("StartObj.startNum: ==5 StartInitMode..")
            InitFuncObj.SetStartNum(1)
            InitFuncObj.SetStartNum=nil --清空启动次数计数函数，避免内存占用
            local InitStartName = SystemFileName.InitStartName
            SystemFileName=nil
            InitFuncObj=nil
            collectgarbage("collect") --回收之前的内存
            dofile(InitStartName) --开始进入初始化模式
            return
        end
    end
    if not(file.exists(BootProcessVar.UserWifiConnConfig)) then  --如果没有wifi配置文件，进入wifi配置模式
        InitFuncObj.SetStartNum(0)
        InitFuncObj.SetStartNum=nil --清空启动次数计数函数，避免内存占用
        --配置用户连接
        local InitWifiAccessName = SystemFileName.InitWifiAccessName
        SystemFileName=nil
        InitFuncObj=nil
        dofile(InitWifiAccessName)
        return
    end
    print("RunEnd...") --初始化文件执行结束
    InitFuncObj.SetStartNum(1)
    --系统启动设置定时器1，五秒钟后将startMode.txt中的startNum修改为0
    tmr.create():alarm(5000,tmr.ALARM_SINGLE,function() 
        InitFuncObj.SetStartNum(0)
        InitFuncObj.SetStartNum=nil --清空启动次数计数函数，避免内存占用
    end)
    local WifiConnFile = SystemFileName.WifiConnFile
    SystemFileName=nil
    dofile(WifiConnFile)
   --初始化连接连接网络，执行失败，开启用户模式AP
end
InitFunc()
